using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 药品管理系统
{
    public partial class frm_Supply : Form
    {
        private DataTable SupplyTable;
        public frm_Supply()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.CenterScreen;
            this.dgv_Supply.AllowUserToAddRows = false;
            this.dgv_Supply.RowHeadersVisible = false;
            this.dgv_Supply.BackgroundColor = Color.White;
            this.dgv_Supply.AutoSizeColumnsMode =
                DataGridViewAutoSizeColumnsMode.AllCells;
        }

 
        private void btn_Query_Click(object sender, EventArgs e)
        {
            SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接；
            sqlConnection.ConnectionString =
                "Server=KK的秘密;Database=MMS;Integrated Security=sspi";                             //在字符串变量中，描述连接字符串所需的服务器地址、数据库名称、集成安全性（即是否使用Windows验证）；
            SqlCommand sqlCommand = new SqlCommand();                                                       //声明并实例化SQL命令；
            sqlCommand.Connection = sqlConnection;                                                          //将SQL命令的连接属性指向SQL连接；
            sqlCommand.CommandText = "SELECT * FROM tb_supply;";                                             //指定SQL命令的命令文本；该命令查询所有班级，以用作下拉框数据源；
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //声明并实例化SQL数据适配器；
            sqlDataAdapter.SelectCommand = sqlCommand;
            sqlDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
            DataTable drugrecord = new DataTable();
            DataTable supplyTable = new DataTable();
            sqlConnection.Open();                                                                           //打开SQL连接；
            sqlDataAdapter.Fill(supplyTable);   
            sqlConnection.Close();
            this.SupplyTable = supplyTable;
            this.dgv_Supply.Columns.Clear();
            this.dgv_Supply.DataSource = supplyTable;                                                       //将数据网格视图的数据源设为学生数据表；
            this.dgv_Supply.Columns["Sno"].HeaderText = "供应商编号";                                               //将数据网格视图的指定列的表头文本设为中文；
            this.dgv_Supply.Columns["Sname"].HeaderText = "供应商名称";
            this.dgv_Supply.Columns["Scharger"].HeaderText = "负责人";
            this.dgv_Supply.Columns["Scontact"].HeaderText = "联系方式";
            this.dgv_Supply.Columns["Spost"].HeaderText = "邮箱";
            this.dgv_Supply.Columns["Scity"].HeaderText = "城市";
            this.dgv_Supply.Columns["Saddress"].HeaderText = "地址";
        }

        private void btn_Add_Click(object sender, EventArgs e)
        {
            SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接；
            sqlConnection.ConnectionString =
               "Server=KK的秘密;Database=MMS;Integrated Security=sspi";                               //在字符串变量中，描述连接字符串所需的服务器地址、数据库名称、集成安全性（即是否使用Windows验证）；
            SqlCommand sqlCommand = new SqlCommand();                                                       //声明并实例化SQL命令；
            sqlCommand.Connection = sqlConnection;                                                          //将SQL命令的连接属性指向SQL连接；
            sqlCommand.CommandText =                                                                        //指定SQL命令的命令文本；
                "UPDATE tb_supply"
                + " SET No=@Sno,Name=@Sname,charger=@Scharger,contact=@Scontact,post=@Spost,city=@Scity,address=@Saddress"
                + " WHERE No=@Sno;";
            sqlCommand.Parameters.Add("@Sno", SqlDbType.Char, 4, "No");                                  //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度（仅用于定长类型）、所绑定的数据表中的列名；
            sqlCommand.Parameters.Add("@Sname", SqlDbType.VarChar, 20, "Name");
            sqlCommand.Parameters.Add("@Scharger", SqlDbType.VarChar, 20, "charger");
            sqlCommand.Parameters.Add("@Scontact", SqlDbType.VarChar , 20, "contact");
            sqlCommand.Parameters.Add("@Spost", SqlDbType.VarChar , 20, "post");
            sqlCommand.Parameters.Add("@Scity", SqlDbType.VarChar ,20, "city");
            sqlCommand.Parameters.Add("@Saddress", SqlDbType.VarChar , 20, "address");
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //声明并实例化SQL数据适配器，同时借助构造函数，将其SelectCommand属性设为先前创建的SQL命令；
            sqlDataAdapter.UpdateCommand = sqlCommand;                                                      //将SQL数据适配器的更新命令属性指向SQL命令；
            DataTable supplyTable = this.SupplyTable;                                                     //声明数据表，并指向本窗体的相应私有字段；
            sqlConnection.Open();                                                                           //打开SQL连接；
            int rowAffected = sqlDataAdapter.Update(supplyTable );                                          //SQL数据适配器根据学生数据表提交更新，并返回受影响行数；
            sqlConnection.Close();                                                                          //关闭SQL连接；
            MessageBox.Show("更新" + rowAffected.ToString() + "行。");                                      //在消息框显示受影响行数；
        }

        private void btn_Clear_Click(object sender, EventArgs e)
        {
            SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接；
            sqlConnection.ConnectionString =
              "Server=KK的秘密;Database=MMS;Integrated Security=sspi";                       //在字符串变量中，描述连接字符串所需的服务器地址、数据库名称、集成安全性（即是否使用Windows验证）；
            SqlCommand deleteCommand = new SqlCommand();                                                    //声明并实例化SQL命令；该命令用于删除；
            deleteCommand.Connection = sqlConnection;                                                       //将SQL命令的连接属性指向SQL连接；
            deleteCommand.CommandText =                                                                     //指定SQL命令的命令文本；
                "DELETE tb_supply"
                + " WHERE Sno='" + textBox8.Text + "';";
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //声明并实例化SQL数据适配器；                            
            sqlDataAdapter.DeleteCommand = deleteCommand;                                                   //将SQL数据适配器的属性DeleteCommand指向用于删除记录的SQL命令；
            DataTable supply = (DataTable)this.dgv_Supply.DataSource;                                  //声明数据表，并指向数据网格视图的数据源；数据源默认类型为object，还需强制转换类型；
            sqlConnection.Open();
            int rowAffected = deleteCommand.ExecuteNonQuery();                                           //SQL数据适配器根据学生数据表提交所有更新，并返回受影响行数；
            sqlConnection.Close();                                                                          //关闭SQL连接；
            MessageBox.Show("删除" + rowAffected.ToString() + "行。");
            sqlConnection.Close();  
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection sqlConnection = new SqlConnection();                                          //声明并实例化SQL连接；
            sqlConnection.ConnectionString =
               "Server=KK的秘密;Database=MMS;Integrated Security=sspi";                         //在字符串变量中，描述连接字符串所需的服务器地址、数据库名称、集成安全性（即是否使用Windows验证）；
            SqlCommand sqlCommand = sqlConnection.CreateCommand();                                      //调用SQL连接的方法CreateCommand来创建SQL命令；该命令将绑定SQL连接；
            sqlCommand.CommandText =
                "INSERT tb_supply (Sno,Sname,Scharger,Scontact,Spost,Scity,Saddress) VALUES(@No,@Name,@charger,@contact,@post,@city,@address);";                 //指定SQL命令的命令文本；命令文本包含参数；
            sqlCommand.Parameters.AddWithValue("@No", this.textBox1.Text.Trim());                     //向SQL命令的参数集合添加参数的名称、值；
            sqlCommand.Parameters.AddWithValue("@Name", this.textBox2.Text.Trim());
            sqlCommand.Parameters.AddWithValue("@charger", this.textBox3.Text.Trim());
            sqlCommand.Parameters.AddWithValue("@contact", this.textBox4 .Text.Trim());
            sqlCommand.Parameters.AddWithValue("@post", this.textBox5.Text.Trim());
            sqlCommand.Parameters.AddWithValue("@city", this.textBox6.Text.Trim());
            sqlCommand.Parameters.AddWithValue("@address", this.textBox7.Text.Trim());
            //SQL参数自动识别类型；若参数值为字符串，则类型自动设为NVARCHAR，且可在执行时自动转换；但对于相同密码，VARCHAR/NVARCHAR类型所获得的散列值不同，故需手动将SQL参数类型统一设为VARCHAR;
            sqlConnection.Open();                                                                       //打开SQL连接；
            int rowAffected = sqlCommand.ExecuteNonQuery();                                             //调用SQL命令的方法ExecuteNonQuery来执行命令，向数据库写入数据，并返回受影响行数；
            sqlConnection.Close();                                                                      //关闭SQL连接；
            if (rowAffected == 1)                                                                       //若成功写入1行记录；
            {
                MessageBox.Show("添加记录成功");                                                          //给出正确提示；
            }
            else                                                                                        //否则；
            {
                MessageBox.Show("添加记录失败");                                                          //给出错误提示；
            }
        }

        private void 菜单ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frm_Menu a = new frm_Menu();
            a.Show();
            this.Hide();
        }

        private void 登录ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frm_Login b = new frm_Login();
            b.Show();
            this.Hide();
        }

        private void 注册ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frm_Register c = new frm_Register();
            c.Show();
            this.Hide();
        }

        private void btn_SearchByNo_Click(object sender, EventArgs e)
        {
            DataRow searchResultRow = this.SupplyTable.Rows.Find(this.txb_1.Text.Trim());
            DataTable searchResultTable = this.SupplyTable.Clone();
            searchResultTable.ImportRow(searchResultRow);
            this.dgv_Supply.DataSource = searchResultTable; 
        }
    }
}
